home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / ForStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  4.0 KB  |  174 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.Type;
  9.  
  10. public class ForStatement extends Statement {
  11.    Statement init;
  12.    Expression cond;
  13.    Expression inc;
  14.    Statement body;
  15.  
  16.    public ForStatement(int var1, Statement var2, Expression var3, Expression var4, Statement var5) {
  17.       super(92, var1);
  18.       this.init = var2;
  19.       this.cond = var3;
  20.       this.inc = var4;
  21.       this.body = var5;
  22.    }
  23.  
  24.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  25.       var3 = ((Statement)this).reach(var1, var3);
  26.       CheckContext var6 = new CheckContext(var2, this);
  27.       if (this.init != null) {
  28.          var3 = this.init.check(var1, var6, var3, var5);
  29.       }
  30.  
  31.       if (this.cond != null) {
  32.          ConditionVars var7 = this.cond.checkCondition(var1, var6, ((Statement)this).reach(var1, var3), var5);
  33.          this.cond = ((Node)this).convert(var1, var6, Type.tBoolean, this.cond);
  34.          var3 = this.body.check(var1, var6, var7.vsTrue, var5);
  35.          if (this.inc != null) {
  36.             this.inc.check(var1, var6, var3 & var6.vsContinue, var5);
  37.          }
  38.  
  39.          var3 = var6.vsBreak & var7.vsFalse;
  40.       } else {
  41.          var3 = this.body.check(var1, var6, var3, var5);
  42.          if (this.inc != null) {
  43.             this.inc.check(var1, var6, var3 & var6.vsContinue, var5);
  44.          }
  45.  
  46.          var3 = var6.vsBreak;
  47.       }
  48.  
  49.       return var2.removeAdditionalVars(var3);
  50.    }
  51.  
  52.    public Statement inline(Environment var1, Context var2) {
  53.       var2 = new Context(var2, this);
  54.       if (this.init != null) {
  55.          Statement[] var3 = new Statement[]{this.init, this};
  56.          this.init = null;
  57.          return (new CompoundStatement(super.where, var3)).inline(var1, var2);
  58.       } else {
  59.          if (this.cond != null) {
  60.             this.cond = this.cond.inlineValue(var1, var2);
  61.          }
  62.  
  63.          if (this.body != null) {
  64.             this.body = this.body.inline(var1, var2);
  65.          }
  66.  
  67.          if (this.inc != null) {
  68.             this.inc = this.inc.inline(var1, var2);
  69.          }
  70.  
  71.          return this;
  72.       }
  73.    }
  74.  
  75.    public Statement copyInline(Context var1, boolean var2) {
  76.       ForStatement var3 = (ForStatement)((Node)this).clone();
  77.       if (this.init != null) {
  78.          var3.init = this.init.copyInline(var1, var2);
  79.       }
  80.  
  81.       if (this.cond != null) {
  82.          var3.cond = this.cond.copyInline(var1);
  83.       }
  84.  
  85.       if (this.body != null) {
  86.          var3.body = this.body.copyInline(var1, var2);
  87.       }
  88.  
  89.       if (this.inc != null) {
  90.          var3.inc = this.inc.copyInline(var1);
  91.       }
  92.  
  93.       return var3;
  94.    }
  95.  
  96.    public int costInline(int var1) {
  97.       int var2 = 2;
  98.       if (this.init != null) {
  99.          var2 += this.init.costInline(var1);
  100.       }
  101.  
  102.       if (this.cond != null) {
  103.          var2 += this.cond.costInline(var1);
  104.       }
  105.  
  106.       if (this.body != null) {
  107.          var2 += this.body.costInline(var1);
  108.       }
  109.  
  110.       if (this.inc != null) {
  111.          var2 += this.inc.costInline(var1);
  112.       }
  113.  
  114.       return var2;
  115.    }
  116.  
  117.    public void code(Environment var1, Context var2, Assembler var3) {
  118.       CodeContext var4 = new CodeContext(var2, this);
  119.       if (this.init != null) {
  120.          this.init.code(var1, var4, var3);
  121.       }
  122.  
  123.       Label var5 = new Label();
  124.       Label var6 = new Label();
  125.       var3.add(super.where, 167, var6);
  126.       var3.add(var5);
  127.       if (this.body != null) {
  128.          this.body.code(var1, var4, var3);
  129.       }
  130.  
  131.       var3.add(var4.contLabel);
  132.       if (this.inc != null) {
  133.          this.inc.code(var1, var4, var3);
  134.       }
  135.  
  136.       var3.add(var6);
  137.       if (this.cond != null) {
  138.          this.cond.codeBranch(var1, var4, var3, var5, true);
  139.       } else {
  140.          var3.add(super.where, 167, var5);
  141.       }
  142.  
  143.       var3.add(var4.breakLabel);
  144.    }
  145.  
  146.    public void print(PrintStream var1, int var2) {
  147.       super.print(var1, var2);
  148.       var1.print("for (");
  149.       if (this.init != null) {
  150.          this.init.print(var1, var2);
  151.          var1.print(" ");
  152.       } else {
  153.          var1.print("; ");
  154.       }
  155.  
  156.       if (this.cond != null) {
  157.          this.cond.print(var1);
  158.          var1.print(" ");
  159.       }
  160.  
  161.       var1.print("; ");
  162.       if (this.inc != null) {
  163.          this.inc.print(var1);
  164.       }
  165.  
  166.       var1.print(") ");
  167.       if (this.body != null) {
  168.          this.body.print(var1, var2);
  169.       } else {
  170.          var1.print(";");
  171.       }
  172.    }
  173. }
  174.